/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.softnight.dao;

import br.com.softnight.db.ConnectionFactory;
import br.com.softnight.entidades.Cliente;
import java.sql.*;
import java.util.ArrayList;

public class ClienteDAO {

    //método para incluir um aluno na base de dados
    public void insere(Cliente cliente) throws SQLException {
    
        String insereSql = "INSERT INTO Cliente ("
                + " id,"
                + " nome,"
                + " dataNascimento,"
                + " cpf,"
                + " enderecoResidencial,"
                + " numeroResidencial,"
                + " complementoResidencial,"
                + " bairroResidencial,"
                + " cidadeResidencial,"
                + " ufResidencial,"
                + " cepResidencial,"
                + " dddResidencial,"
                + " foneResidencial"
                + " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(insereSql);
        pstmt.setLong(1, cliente.getId());
        pstmt.setString(2, cliente.getNome());
        pstmt.setDate(3, cliente.getDataNascimento());
        pstmt.setString(4, cliente.getCpf());
        pstmt.setString(5, cliente.getEnderecoResidencial());
        pstmt.setString(6, cliente.getNumeroResidencial());
        pstmt.setString(7, cliente.getComplementoResidencial());
        pstmt.setString(8, cliente.getBairroResidencial());
        pstmt.setString(9, cliente.getCidadeResidencial());
        pstmt.setString(10, cliente.getUfResidencial());
        pstmt.setString(11, cliente.getCepResidencial());
        pstmt.setString(12, cliente.getDddResidencial());
        pstmt.setString(13, cliente.getFoneResidencial());
        pstmt.executeUpdate();
    }

    //método para consultar um aluno de determinada matricula fornecida no parametro matrAluno
    public Cliente consultaPorId(Long id) throws SQLException {
        Cliente cliente = null;
            
        String consultaSql = "SELECT"
                + " id,"
                + " nome,"
                + " dataNascimento,"
                + " cpf,"
                + " enderecoResidencial,"
                + " numeroResidencial,"
                + " complementoResidencial,"
                + " bairroResidencial,"
                + " cidadeResidencial,"
                + " ufResidencial,"
                + " cepResidencial,"
                + " dddResidencial,"
                + " foneResidencial"
                + " FROM Cliente WHERE id = ?";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement pstmt = con.prepareStatement(consultaSql);
        pstmt.setLong(1, id);
        ResultSet resultado = pstmt.executeQuery();
        if (resultado.next()) {
            String nome = resultado.getString("nome");
            Date dataNascimento = resultado.getDate("dataNascimento");
            String cpf = resultado.getString("cpf");
            String enderecoResidencial = resultado.getString("enderecoResidencial");
            String numeroResidencial = resultado.getString("numeroResidencial");
            String complementoResidencial = resultado.getString("complementoResidencial");
            String bairroResidencial = resultado.getString("bairroResidencial");
            String cidadeResidencial = resultado.getString("cidadeResidencial");
            String ufResidencial = resultado.getString("ufResidencial");
            String cepResidencial = resultado.getString("cepResidencial");
            String dddResidencial = resultado.getString("dddResidencial");
            String foneResidencial = resultado.getString("foneResidencial");

            cliente = new Cliente();
            cliente.setId(id);
            cliente.setNome(nome);
            cliente.setDataNascimento(dataNascimento);
            cliente.setCpf(cpf);
            cliente.setEnderecoResidencial(enderecoResidencial);
            cliente.setNumeroResidencial(numeroResidencial);
            cliente.setComplementoResidencial(complementoResidencial);
            cliente.setBairroResidencial(bairroResidencial);
            cliente.setCidadeResidencial(cidadeResidencial);
            cliente.setUfResidencial(ufResidencial);
            cliente.setCepResidencial(cepResidencial);
            cliente.setDddResidencial(dddResidencial);
            cliente.setFoneResidencial(foneResidencial);
        }

        return cliente;
    }

    public ArrayList<Cliente> consultaTodos() throws SQLException {
        ArrayList<Cliente> clientes = new ArrayList<Cliente>();
            
        String consultaSql = "SELECT"
                + " id,"
                + " nome,"
                + " dataNascimento,"
                + " cpf,"
                + " enderecoResidencial,"
                + " numeroResidencial,"
                + " complementoResidencial,"
                + " bairroResidencial,"
                + " cidadeResidencial,"
                + " ufResidencial,"
                + " cepResidencial,"
                + " dddResidencial,"
                + " foneResidencial"
                + " FROM Cliente ";
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement pstmt = con.prepareStatement(consultaSql);
        ResultSet resultado = pstmt.executeQuery();
        while (resultado.next()) {
            Long id = resultado.getLong("id");
            String nome = resultado.getString("nome");
            Date dataNascimento = resultado.getDate("dataNascimento");
            String cpf = resultado.getString("cpf");
            String enderecoResidencial = resultado.getString("enderecoResidencial");
            String numeroResidencial = resultado.getString("numeroResidencial");
            String complementoResidencial = resultado.getString("complementoResidencial");
            String bairroResidencial = resultado.getString("bairroResidencial");
            String cidadeResidencial = resultado.getString("cidadeResidencial");
            String ufResidencial = resultado.getString("ufResidencial");
            String cepResidencial = resultado.getString("cepResidencial");
            String dddResidencial = resultado.getString("dddResidencial");
            String foneResidencial = resultado.getString("foneResidencial");

            Cliente cliente = new Cliente();
            cliente.setId(id);
            cliente.setNome(nome);
            cliente.setDataNascimento(dataNascimento);
            cliente.setCpf(cpf);
            cliente.setEnderecoResidencial(enderecoResidencial);
            cliente.setNumeroResidencial(numeroResidencial);
            cliente.setComplementoResidencial(complementoResidencial);
            cliente.setBairroResidencial(bairroResidencial);
            cliente.setCidadeResidencial(cidadeResidencial);
            cliente.setUfResidencial(ufResidencial);
            cliente.setCepResidencial(cepResidencial);
            cliente.setDddResidencial(dddResidencial);
            cliente.setFoneResidencial(foneResidencial);
            
            clientes.add(cliente);
        }

        return clientes;
    }

    public void atualiza(Cliente pessoa) throws SQLException {
        String atualizaSql = "UPDATE Cliente SET"
                + " nome = ?,"
                + " dataNascimento = ?,"
                + " cpf = ?,"
                + " enderecoResidencial = ?,"
                + " numeroResidencial = ?,"
                + " complementoResidencial = ?,"
                + " bairroResidencial = ?,"
                + " cidadeResidencial = ?,"
                + " ufResidencial = ?,"
                + " cepResidencial = ?,"
                + " dddResidencial = ?,"
                + " foneResidencial = ?"
                + " WHERE id = ?";
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(atualizaSql);
        pstmt.setString(1, pessoa.getNome());
        pstmt.setDate(2, pessoa.getDataNascimento());
        pstmt.setString(3, pessoa.getCpf());
        pstmt.setString(4, pessoa.getEnderecoResidencial());
        pstmt.setString(5, pessoa.getNumeroResidencial());
        pstmt.setString(6, pessoa.getComplementoResidencial());
        pstmt.setString(7, pessoa.getBairroResidencial());
        pstmt.setString(8, pessoa.getCidadeResidencial());
        pstmt.setString(9, pessoa.getUfResidencial());
        pstmt.setString(10, pessoa.getCepResidencial());
        pstmt.setString(11, pessoa.getDddResidencial());
        pstmt.setString(12, pessoa.getFoneResidencial());
        pstmt.setLong(13, pessoa.getId());

        pstmt.executeUpdate();
    }

    public void exclui(Long id) throws SQLException {
        String deleteSql = "DELETE FROM Pessoa WHERE id = ?";
        Connection conn = ConnectionFactory.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(deleteSql);
        pstmt.setLong(1, id);
        pstmt.execute();
    }
}
